#include "Shm.hpp"  // 引入共享内存相关类
#include "Fifo.hpp" // 引入命名管道相关类

int main()
{
    // 创建 FileOper 对象，打开用于写入的 FIFO 管道
    FileOper writerfile(PATH, FILENAME);
    writerfile.OpenForWrite();  // 打开管道用于写入

    // 创建 Shm 对象，以 USER 用户类型身份打开共享内存
    Shm shm(pathname, projid, USER);
    
    // 获取共享内存的虚拟地址
    char *mem = (char *)shm.VirtualAddr();

    int index = 0;
    // 循环向共享内存中写入 'A' 到 'Z' 的字母
    for (char c = 'A'; c <= 'Z'; c++, index += 2)
    {
        // 将字符 c 写入共享内存的当前位置
        mem[index] = c;
        mem[index + 1] = c;
        
        // 添加字符串结束符
        mem[index + 2] = 0;

        // 每写入一对字符后，唤醒等待的读取进程
        writerfile.Wakeup();
        
        // 每次写入后，程序休眠1秒，模拟延迟
        sleep(1);
    }

    // 关闭 FIFO 文件描述符
    writerfile.Close();
    
    return 0;
}